/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.edinet.agencialinea3.ejb.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 *
 * @author Iván Zúñiga & Tomás Quinteros
 */
@Entity
@Table(name = "DOCUMENTO")
@NamedQueries({
    @NamedQuery(name = "Documento.findAll", query = "SELECT d FROM Documento d"),
    @NamedQuery(name = "Documento.findByNumeroDespacho", query = "SELECT d FROM Documento d WHERE d.numeroDespacho = :numeroDespacho"),
    @NamedQuery(name = "Documento.findByFechaAceptacion", query = "SELECT d FROM Documento d WHERE d.fechaAceptacion = :fechaAceptacion"),
    @NamedQuery(name = "Documento.findByNumeroAceptacion", query = "SELECT d FROM Documento d WHERE d.numeroAceptacion = :numeroAceptacion"),
    @NamedQuery(name = "Documento.findByNumeroDctoTransp", query = "SELECT d FROM Documento d WHERE d.numeroDctoTransp = :numeroDctoTransp"),
    @NamedQuery(name = "Documento.findByFechaDctoTransp", query = "SELECT d FROM Documento d WHERE d.fechaDctoTransp = :fechaDctoTransp"),
    @NamedQuery(name = "Documento.findByNumeroViaje", query = "SELECT d FROM Documento d WHERE d.numeroViaje = :numeroViaje"),
    @NamedQuery(name = "Documento.findByNave", query = "SELECT d FROM Documento d WHERE d.nave = :nave"),
    @NamedQuery(name = "Documento.findByVb", query = "SELECT d FROM Documento d WHERE d.vb = :vb"),
    @NamedQuery(name = "Documento.findByResolVb", query = "SELECT d FROM Documento d WHERE d.resolVb = :resolVb"),
    @NamedQuery(name = "Documento.findByFechaResolVb", query = "SELECT d FROM Documento d WHERE d.fechaResolVb = :fechaResolVb"),
    @NamedQuery(name = "Documento.findByDescripcionVb", query = "SELECT d FROM Documento d WHERE d.descripcionVb = :descripcionVb"),
    @NamedQuery(name = "Documento.findByNumeroDctoRegimen", query = "SELECT d FROM Documento d WHERE d.numeroDctoRegimen = :numeroDctoRegimen"),
    @NamedQuery(name = "Documento.findByPlazoRegimen", query = "SELECT d FROM Documento d WHERE d.plazoRegimen = :plazoRegimen"),
    @NamedQuery(name = "Documento.findByTotalItem", query = "SELECT d FROM Documento d WHERE d.totalItem = :totalItem"),
    @NamedQuery(name = "Documento.findByTotalBulto", query = "SELECT d FROM Documento d WHERE d.totalBulto = :totalBulto"),
    @NamedQuery(name = "Documento.findByTotalPeso", query = "SELECT d FROM Documento d WHERE d.totalPeso = :totalPeso"),
    @NamedQuery(name = "Documento.findByValorFob", query = "SELECT d FROM Documento d WHERE d.valorFob = :valorFob"),
    @NamedQuery(name = "Documento.findByFlete", query = "SELECT d FROM Documento d WHERE d.flete = :flete"),
    @NamedQuery(name = "Documento.findByValorCif", query = "SELECT d FROM Documento d WHERE d.valorCif = :valorCif"),
    @NamedQuery(name = "Documento.findByParcial", query = "SELECT d FROM Documento d WHERE d.parcial = :parcial"),
    @NamedQuery(name = "Documento.findByNumeroParcia", query = "SELECT d FROM Documento d WHERE d.numeroParcia = :numeroParcia"),
    @NamedQuery(name = "Documento.findByTotalParcial", query = "SELECT d FROM Documento d WHERE d.totalParcial = :totalParcial"),
    @NamedQuery(name = "Documento.findByAceptacion", query = "SELECT d FROM Documento d WHERE d.aceptacion = :aceptacion"),
    @NamedQuery(name = "Documento.findByFechaSalida", query = "SELECT d FROM Documento d WHERE d.fechaSalida = :fechaSalida"),
    @NamedQuery(name = "Documento.findByExamenSalida", query = "SELECT d FROM Documento d WHERE d.examenSalida = :examenSalida"),
    @NamedQuery(name = "Documento.findByFechaLegal", query = "SELECT d FROM Documento d WHERE d.fechaLegal = :fechaLegal"),
    @NamedQuery(name = "Documento.findByExamenLegal", query = "SELECT d FROM Documento d WHERE d.examenLegal = :examenLegal"),
    @NamedQuery(name = "Documento.findByReferenciaCliente", query = "SELECT d FROM Documento d WHERE d.referenciaCliente = :referenciaCliente"),
    @NamedQuery(name = "Documento.findByEstado", query = "SELECT d FROM Documento d WHERE d.estado = :estado"),
    @NamedQuery(name = "Documento.findByNumeroConEmb", query = "SELECT d FROM Documento d WHERE d.numeroConEmb = :numeroConEmb"),
    @NamedQuery(name = "Documento.findByFechaConEmb", query = "SELECT d FROM Documento d WHERE d.fechaConEmb = :fechaConEmb")})
public class Documento implements Serializable {
    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "NUMERO_DESPACHO")
    private BigDecimal numeroDespacho;
    @Column(name = "FECHA_ACEPTACION")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaAceptacion;
    @Column(name = "NUMERO_ACEPTACION")
    private BigInteger numeroAceptacion;
    @Column(name = "NUMERO_DCTO_TRANSP")
    private BigInteger numeroDctoTransp;
    @Column(name = "FECHA_DCTO_TRANSP")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaDctoTransp;
    @Size(max = 50)
    @Column(name = "NUMERO_VIAJE")
    private String numeroViaje;
    @Size(max = 50)
    @Column(name = "NAVE")
    private String nave;
    @Size(max = 50)
    @Column(name = "VB")
    private String vb;
    @Size(max = 50)
    @Column(name = "RESOL_VB")
    private String resolVb;
    @Column(name = "FECHA_RESOL_VB")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaResolVb;
    @Size(max = 50)
    @Column(name = "DESCRIPCION_VB")
    private String descripcionVb;
    @Size(max = 50)
    @Column(name = "NUMERO_DCTO_REGIMEN")
    private String numeroDctoRegimen;
    @Size(max = 50)
    @Column(name = "PLAZO_REGIMEN")
    private String plazoRegimen;
    @Column(name = "TOTAL_ITEM")
    private BigInteger totalItem;
    @Column(name = "TOTAL_BULTO")
    private BigInteger totalBulto;
    @Column(name = "TOTAL_PESO")
    private BigInteger totalPeso;
    @Column(name = "VALOR_FOB")
    private BigInteger valorFob;
    @Column(name = "FLETE")
    private BigInteger flete;
    @Column(name = "VALOR_CIF")
    private BigInteger valorCif;
    @Size(max = 10)
    @Column(name = "PARCIAL")
    private String parcial;
    @Column(name = "NUMERO_PARCIA")
    private BigInteger numeroParcia;
    @Column(name = "TOTAL_PARCIAL")
    private BigInteger totalParcial;
    @Column(name = "ACEPTACION")
    private BigInteger aceptacion;
    @Column(name = "FECHA_SALIDA")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaSalida;
    @Size(max = 50)
    @Column(name = "EXAMEN_SALIDA")
    private String examenSalida;
    @Column(name = "FECHA_LEGAL")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaLegal;
    @Size(max = 50)
    @Column(name = "EXAMEN_LEGAL")
    private String examenLegal;
    @Size(max = 50)
    @Column(name = "REFERENCIA_CLIENTE")
    private String referenciaCliente;
    @Size(max = 50)
    @Column(name = "ESTADO")
    private String estado;
    @Column(name = "NUMERO_CON_EMB")
    private BigInteger numeroConEmb;
    @Column(name = "FECHA_CON_EMB")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaConEmb;
    @OneToMany(mappedBy = "documentoNumeroDespacho")
    private List<Facturas> facturasList;
    @JoinColumn(name = "VIA_TRANSPORTE", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private ViaTransporte viaTransporte;
    @JoinColumn(name = "TIPO_OPERACION", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private TipoOperacion tipoOperacion;
    @JoinColumn(name = "TIPO_CARGA", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private TipoCarga tipoCarga;
    @JoinColumn(name = "SEGURO", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Seguro seguro;
    @JoinColumn(name = "PUERTO_EMBARQUE", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Puerto puertoEmbarque;
    @JoinColumn(name = "PUERTO_DESEMBARQUE", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Puerto puertoDesembarque;
    @JoinColumn(name = "PAIS_DESTINO", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Pais paisDestino;
    @JoinColumn(name = "ADUANA_REGIMEN", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Aduana aduanaRegimen;
    @JoinColumn(name = "ADUANA", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Aduana aduana;
    @JoinColumn(name = "AUTORIZACION", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Autorizacion autorizacion;
    @JoinColumn(name = "CLAUSULA_VENTA", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private ClausulaCompra clausulaVenta;
    @JoinColumn(name = "COD_REG_ORI", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private CodRegOri codRegOri;
    @JoinColumn(name = "COMPANIA_TRANSPORTADORA", referencedColumnName = "RUT")
    @ManyToOne(optional = false)
    private CompaniaTransportadora companiaTransportadora;
    @JoinColumn(name = "CONSIGNANTE", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Consignante consignante;
    @JoinColumn(name = "DESPACHADOR", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Despachador despachador;
    @JoinColumn(name = "EMISOR_DOCUMENTO", referencedColumnName = "RUT")
    @ManyToOne(optional = false)
    private EmisorDocumento emisorDocumento;
    @JoinColumn(name = "FORMA_PAGO", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private FormaPago formaPago;
    @JoinColumn(name = "CONSIGNATARIO", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Importador consignatario;
    @JoinColumn(name = "MODALIDAD_VENTA", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private ModalidadVenta modalidadVenta;
    @JoinColumn(name = "MONEDA", referencedColumnName = "CODIGO")
    @ManyToOne(optional = false)
    private Moneda moneda;
    @OneToMany(mappedBy = "documentoNumeroDespacho")
    private List<Items> itemsList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "documento")
    private List<RegimenSuspensivo> regimenSuspensivoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "documentoNumeroDespacho")
    private List<Bulto> bultoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "documento")
    private List<EstadoContable> estadoContableList;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "documento")
    private TrazabilidadDcto trazabilidadDcto;

    public Documento() {
    }

    public Documento(BigDecimal numeroDespacho) {
        this.numeroDespacho = numeroDespacho;
    }

    public BigDecimal getNumeroDespacho() {
        return numeroDespacho;
    }

    public void setNumeroDespacho(BigDecimal numeroDespacho) {
        this.numeroDespacho = numeroDespacho;
    }

    public Date getFechaAceptacion() {
        return fechaAceptacion;
    }

    public void setFechaAceptacion(Date fechaAceptacion) {
        this.fechaAceptacion = fechaAceptacion;
    }

    public BigInteger getNumeroAceptacion() {
        return numeroAceptacion;
    }

    public void setNumeroAceptacion(BigInteger numeroAceptacion) {
        this.numeroAceptacion = numeroAceptacion;
    }

    public BigInteger getNumeroDctoTransp() {
        return numeroDctoTransp;
    }

    public void setNumeroDctoTransp(BigInteger numeroDctoTransp) {
        this.numeroDctoTransp = numeroDctoTransp;
    }

    public Date getFechaDctoTransp() {
        return fechaDctoTransp;
    }

    public void setFechaDctoTransp(Date fechaDctoTransp) {
        this.fechaDctoTransp = fechaDctoTransp;
    }

    public String getNumeroViaje() {
        return numeroViaje;
    }

    public void setNumeroViaje(String numeroViaje) {
        this.numeroViaje = numeroViaje;
    }

    public String getNave() {
        return nave;
    }

    public void setNave(String nave) {
        this.nave = nave;
    }

    public String getVb() {
        return vb;
    }

    public void setVb(String vb) {
        this.vb = vb;
    }

    public String getResolVb() {
        return resolVb;
    }

    public void setResolVb(String resolVb) {
        this.resolVb = resolVb;
    }

    public Date getFechaResolVb() {
        return fechaResolVb;
    }

    public void setFechaResolVb(Date fechaResolVb) {
        this.fechaResolVb = fechaResolVb;
    }

    public String getDescripcionVb() {
        return descripcionVb;
    }

    public void setDescripcionVb(String descripcionVb) {
        this.descripcionVb = descripcionVb;
    }

    public String getNumeroDctoRegimen() {
        return numeroDctoRegimen;
    }

    public void setNumeroDctoRegimen(String numeroDctoRegimen) {
        this.numeroDctoRegimen = numeroDctoRegimen;
    }

    public String getPlazoRegimen() {
        return plazoRegimen;
    }

    public void setPlazoRegimen(String plazoRegimen) {
        this.plazoRegimen = plazoRegimen;
    }

    public BigInteger getTotalItem() {
        return totalItem;
    }

    public void setTotalItem(BigInteger totalItem) {
        this.totalItem = totalItem;
    }

    public BigInteger getTotalBulto() {
        return totalBulto;
    }

    public void setTotalBulto(BigInteger totalBulto) {
        this.totalBulto = totalBulto;
    }

    public BigInteger getTotalPeso() {
        return totalPeso;
    }

    public void setTotalPeso(BigInteger totalPeso) {
        this.totalPeso = totalPeso;
    }

    public BigInteger getValorFob() {
        return valorFob;
    }

    public void setValorFob(BigInteger valorFob) {
        this.valorFob = valorFob;
    }

    public BigInteger getFlete() {
        return flete;
    }

    public void setFlete(BigInteger flete) {
        this.flete = flete;
    }

    public BigInteger getValorCif() {
        return valorCif;
    }

    public void setValorCif(BigInteger valorCif) {
        this.valorCif = valorCif;
    }

    public String getParcial() {
        return parcial;
    }

    public void setParcial(String parcial) {
        this.parcial = parcial;
    }

    public BigInteger getNumeroParcia() {
        return numeroParcia;
    }

    public void setNumeroParcia(BigInteger numeroParcia) {
        this.numeroParcia = numeroParcia;
    }

    public BigInteger getTotalParcial() {
        return totalParcial;
    }

    public void setTotalParcial(BigInteger totalParcial) {
        this.totalParcial = totalParcial;
    }

    public BigInteger getAceptacion() {
        return aceptacion;
    }

    public void setAceptacion(BigInteger aceptacion) {
        this.aceptacion = aceptacion;
    }

    public Date getFechaSalida() {
        return fechaSalida;
    }

    public void setFechaSalida(Date fechaSalida) {
        this.fechaSalida = fechaSalida;
    }

    public String getExamenSalida() {
        return examenSalida;
    }

    public void setExamenSalida(String examenSalida) {
        this.examenSalida = examenSalida;
    }

    public Date getFechaLegal() {
        return fechaLegal;
    }

    public void setFechaLegal(Date fechaLegal) {
        this.fechaLegal = fechaLegal;
    }

    public String getExamenLegal() {
        return examenLegal;
    }

    public void setExamenLegal(String examenLegal) {
        this.examenLegal = examenLegal;
    }

    public String getReferenciaCliente() {
        return referenciaCliente;
    }

    public void setReferenciaCliente(String referenciaCliente) {
        this.referenciaCliente = referenciaCliente;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public BigInteger getNumeroConEmb() {
        return numeroConEmb;
    }

    public void setNumeroConEmb(BigInteger numeroConEmb) {
        this.numeroConEmb = numeroConEmb;
    }

    public Date getFechaConEmb() {
        return fechaConEmb;
    }

    public void setFechaConEmb(Date fechaConEmb) {
        this.fechaConEmb = fechaConEmb;
    }

    public List<Facturas> getFacturasList() {
        return facturasList;
    }

    public void setFacturasList(List<Facturas> facturasList) {
        this.facturasList = facturasList;
    }

    public ViaTransporte getViaTransporte() {
        return viaTransporte;
    }

    public void setViaTransporte(ViaTransporte viaTransporte) {
        this.viaTransporte = viaTransporte;
    }

    public TipoOperacion getTipoOperacion() {
        return tipoOperacion;
    }

    public void setTipoOperacion(TipoOperacion tipoOperacion) {
        this.tipoOperacion = tipoOperacion;
    }

    public TipoCarga getTipoCarga() {
        return tipoCarga;
    }

    public void setTipoCarga(TipoCarga tipoCarga) {
        this.tipoCarga = tipoCarga;
    }

    public Seguro getSeguro() {
        return seguro;
    }

    public void setSeguro(Seguro seguro) {
        this.seguro = seguro;
    }

    public Puerto getPuertoEmbarque() {
        return puertoEmbarque;
    }

    public void setPuertoEmbarque(Puerto puertoEmbarque) {
        this.puertoEmbarque = puertoEmbarque;
    }

    public Puerto getPuertoDesembarque() {
        return puertoDesembarque;
    }

    public void setPuertoDesembarque(Puerto puertoDesembarque) {
        this.puertoDesembarque = puertoDesembarque;
    }

    public Pais getPaisDestino() {
        return paisDestino;
    }

    public void setPaisDestino(Pais paisDestino) {
        this.paisDestino = paisDestino;
    }

    public Aduana getAduanaRegimen() {
        return aduanaRegimen;
    }

    public void setAduanaRegimen(Aduana aduanaRegimen) {
        this.aduanaRegimen = aduanaRegimen;
    }

    public Aduana getAduana() {
        return aduana;
    }

    public void setAduana(Aduana aduana) {
        this.aduana = aduana;
    }

    public Autorizacion getAutorizacion() {
        return autorizacion;
    }

    public void setAutorizacion(Autorizacion autorizacion) {
        this.autorizacion = autorizacion;
    }

    public ClausulaCompra getClausulaVenta() {
        return clausulaVenta;
    }

    public void setClausulaVenta(ClausulaCompra clausulaVenta) {
        this.clausulaVenta = clausulaVenta;
    }

    public CodRegOri getCodRegOri() {
        return codRegOri;
    }

    public void setCodRegOri(CodRegOri codRegOri) {
        this.codRegOri = codRegOri;
    }

    public CompaniaTransportadora getCompaniaTransportadora() {
        return companiaTransportadora;
    }

    public void setCompaniaTransportadora(CompaniaTransportadora companiaTransportadora) {
        this.companiaTransportadora = companiaTransportadora;
    }

    public Consignante getConsignante() {
        return consignante;
    }

    public void setConsignante(Consignante consignante) {
        this.consignante = consignante;
    }

    public Despachador getDespachador() {
        return despachador;
    }

    public void setDespachador(Despachador despachador) {
        this.despachador = despachador;
    }

    public EmisorDocumento getEmisorDocumento() {
        return emisorDocumento;
    }

    public void setEmisorDocumento(EmisorDocumento emisorDocumento) {
        this.emisorDocumento = emisorDocumento;
    }

    public FormaPago getFormaPago() {
        return formaPago;
    }

    public void setFormaPago(FormaPago formaPago) {
        this.formaPago = formaPago;
    }

    public Importador getConsignatario() {
        return consignatario;
    }

    public void setConsignatario(Importador consignatario) {
        this.consignatario = consignatario;
    }

    public ModalidadVenta getModalidadVenta() {
        return modalidadVenta;
    }

    public void setModalidadVenta(ModalidadVenta modalidadVenta) {
        this.modalidadVenta = modalidadVenta;
    }

    public Moneda getMoneda() {
        return moneda;
    }

    public void setMoneda(Moneda moneda) {
        this.moneda = moneda;
    }

    public List<Items> getItemsList() {
        return itemsList;
    }

    public void setItemsList(List<Items> itemsList) {
        this.itemsList = itemsList;
    }

    public List<RegimenSuspensivo> getRegimenSuspensivoList() {
        return regimenSuspensivoList;
    }

    public void setRegimenSuspensivoList(List<RegimenSuspensivo> regimenSuspensivoList) {
        this.regimenSuspensivoList = regimenSuspensivoList;
    }

    public List<Bulto> getBultoList() {
        return bultoList;
    }

    public void setBultoList(List<Bulto> bultoList) {
        this.bultoList = bultoList;
    }

    public List<EstadoContable> getEstadoContableList() {
        return estadoContableList;
    }

    public void setEstadoContableList(List<EstadoContable> estadoContableList) {
        this.estadoContableList = estadoContableList;
    }

    public TrazabilidadDcto getTrazabilidadDcto() {
        return trazabilidadDcto;
    }

    public void setTrazabilidadDcto(TrazabilidadDcto trazabilidadDcto) {
        this.trazabilidadDcto = trazabilidadDcto;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (numeroDespacho != null ? numeroDespacho.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Documento)) {
            return false;
        }
        Documento other = (Documento) object;
        if ((this.numeroDespacho == null && other.numeroDespacho != null) || (this.numeroDespacho != null && !this.numeroDespacho.equals(other.numeroDespacho))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "cl.edinet.agencialinea3.ejb.entity.Documento[ numeroDespacho=" + numeroDespacho + " ]";
    }
    
}
